//
//  MapViewController.m
//  MapView
//
//  Created by Mohammed Shalaby on 4/8/09.
//  Copyright 2009 eSpace. All rights reserved.
//
/*
 * Copyright (c) 2008, eSpace.
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, 
 * this list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice, 
 * this list of conditions and the following disclaimer in the documentation 
 * and/or other materials provided with the distribution.
 * 
 * Neither the name of eSpace nor the names of its contributors may be used 
 * to endorse or promote products derived from this software without specific 
 * prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#import "MapViewController.h"

static int number = 0;

@implementation MapViewController

/*
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}
*/


// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
	[super loadView];
	CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 20);
	mapView = [[MapView alloc] initWithFrame:frame];
	[self.view addSubview:mapView];
	messagesView = [[UILabel alloc] initWithFrame:CGRectMake(0, mapView.frame.size.height, mapView.frame.size.width , 20)];
	messagesView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
	messagesView.backgroundColor = [UIColor blackColor];
	messagesView.textColor = [UIColor whiteColor];
	messagesView.font = [UIFont systemFontOfSize:13];
	messagesView.adjustsFontSizeToFitWidth = YES;
	[self.view addSubview:messagesView];
	
	UIButton *setCenterButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
	[setCenterButton setTitle:@"undraggable marker" forState:UIControlStateNormal];
	[setCenterButton addTarget:self action:@selector(addUnDraggableMarker) forControlEvents:UIControlEventTouchUpInside];
	setCenterButton.frame = CGRectMake(0, mapView.frame.size.height - 40, 150, 40);
	setCenterButton.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
	[self.view addSubview:setCenterButton];
	
	UIButton *addMarkerButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
	[addMarkerButton setTitle:@"draggable marker" forState:UIControlStateNormal];
	[addMarkerButton addTarget:self action:@selector(addDraggableMarker) forControlEvents:UIControlEventTouchUpInside];
	addMarkerButton.frame = CGRectMake(170, mapView.frame.size.height - 40, 150, 40);
	addMarkerButton.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
	[self.view addSubview:addMarkerButton];	
}

-(MapMarker *) getMarker {
	MapMarker *marker;
	GLatLng center = [mapView.map getCenterLatLng];
	
	switch (number) {
		case 0:
			marker = [MapMarker defaultRedMarkerWithLat:center.lat Lng:center.lng];
			marker.data = @"red";
			break;
		case 1:
			marker = [MapMarker defaultGreenMarkerWithLat:center.lat Lng:center.lng];
			marker.data = @"green";
			break;
		case 2:
			marker = [MapMarker defaultBlueMarkerWithLat:center.lat Lng:center.lng];
			marker.data = @"blue";
			break;
		case 3:
			marker = [MapMarker defaultYellowMarkerWithLat:center.lat Lng:center.lng];
			marker.data = @"yellow";
			break;
		default:
			break;
	}
	
	if (++number > 3)
		number = 0;
	
	return marker;
}

-(void) draggedMarker:(MapMarker *) marker {
	messagesView.text = @"dragging...";
}

-(void) releasedMarker:(MapMarker *) marker {
	NSString *message = [NSString stringWithFormat:@"[Lat: %lf, Lng: %lf]",
						 marker.lat, marker.lng];
	messagesView.text = message;
}

-(void) clickedMarker:(MapMarker *) marker {
	NSString *message = [NSString stringWithFormat:@"[Lat: %lf, Lng: %lf] clicked",
						 marker.lat, marker.lng];
	messagesView.text = message;
}

-(void) addDraggableMarker {
	MapMarker *marker = [self getMarker];
	marker.draggable = YES;
	marker.delegate = self;
	[mapView addMarker:marker];
	[marker show];
}

-(void) addUnDraggableMarker {
	MapMarker *marker = [self getMarker];
	marker.draggable = NO;
	marker.delegate = self;
	[mapView addMarker:marker];
	[marker show];
}


/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
}
*/

/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
	[mapView release];
	[messagesView release];
    [super dealloc];
}


@end
